use std::fs::File;
use std::io::{self, copy};
use std::path::Path;
use reqwest::blocking::get;
use reqwest::Url;

pub fn execute(args: &[String]) {
    if args.len() != 1 {
        eprintln!("用法: wget <URL>");
        return;
    }

    let mut url = args[0].clone();

    // 如果不含  https 和 http 补全
    if !url.starts_with("https://") && !url.starts_with("http://") {
        url = format!("https://{}", url);
        // url = &(new_url.clone());
        println!("URL 不包含协议，已自动补全为: {}", url);
    }

    let url = &url;

    // 检查 URL 是否有效
    if let Err(_) = Url::parse(url) {
        eprintln!("错误: 无效的 URL");
        return;
    }

    // 获取文件名
    let file_name = url.split('/').last().unwrap_or("downloaded_file");

    // 下载文件
    match download_file(url, file_name) {
        Ok(_) => println!("文件已成功下载: {}", file_name),
        Err(e) => eprintln!("下载失败: {}", e),
    }
}

// 下载文件的函数
fn download_file(url: &str, file_name: &str) -> Result<(), io::Error> {
    let response = get(url).map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
    let mut dest = File::create(Path::new(file_name))?;
    let mut content = response;

    // 将下载的内容写入文件
    copy(&mut content, &mut dest)?;
    Ok(())
}
